<?php
/**
 * Speichert zu setzende Cookies temporaer zwischen, um
 * den Vorgang an der richtigen Stelle durchfuehren zu koennen
 * 
 * Gedacht fuer MVC-Konzept, um im MVC-Konstrukt Cookies definieren zu koennen,
 * diese jedoch vor Beginn von <html> gesetzt werden koennen.
 * 
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * 
 * */



Class Yapary_Cookie
{
    /** @var Einmaliger Schluessel zur Pruefung ob Cookies aktiviert sind */
    private $uniqueCookieKey = NULL;
    
    /**
     * Speicherung aller zusetzenden Cookies
     * array[$name] = array('value'  => $value
     * 						'expire' => $time)
     * */
	private $arrCookie = array();
    
	
	function __construct ($disableTriggerError = false)
	{
	    $this->uniqueCookieKey = md5(microtime());
	    if (!@setcookie('uniqueCookieKey', $this->uniqueCookieKey)) {
	        if ($disableTriggerError == false) {
	            trigger_error('Konstruktor-Aufruf innerhalb von HTML', E_USER_WARNING);
	        }
	    }
	}


	/**
	* Prueft ob Cookies aktiviert sind
	* Muss immer als Erstes ausgefuehrt werden
	* @return bool
	*/
	public function enabled ()
	{
		if(!isset($_COOKIE['uniqueCookieKey']) || !$_COOKIE['uniqueCookieKey'] == $this->uniqueCookieKey) {
			return false;
		}

		return true;
	}


	/**
	* Definiert eine zu setzende Cookie
	* ACHTUNG: Cookie wird erst durch Aufruf von save() gesetzt
	* @param mixed $name		: Name der Variablen n=Benutzername; sessionId=Aktuelle SessionId
	* @param mixed $value		: Wert der Variablen
	* @param int $expiration	: Zeitdauer der Gueltigkeit in Sekunden Standard = 2h = 7200
	* @return void
	*/	
	public function add( $name, $value, $expiration = 7200 )
	{
		if (isset($this->arrCookie[$name])) {
    		return false;
		}
	
		$expire = time() + $expiration;
	    $this->arrCookie[$name] = array('value'  => $value,
	                                    'expire' => $expire);
	    return true;
	}
	
	
	/**
	* Gibt den Wert einer Cookie zurueck
	* @param mixed $varName Name des Cookies n=Benutzername; sessionId=Aktuelle SessionId
	* @return mixed|NULL
	*/
	public function get ($name)
	{
	    if (isset($this->arrCookie[$name])) {
	        return $this->arrCookie[$name]['value'];
	    } elseif (isset($_COOKIE[$name])) {
			return $_COOKIE[$name];
		}
		
		return NULL;
	}

	
	/**
	 * Fueht die Speicherung der Cookies durch
	 * @return int	: Anzahl der gesetzten Cookies
	 * */
	public function save ()
	{
	    $count = count($this->arrCookie);
	    if ($count >= 1) {
	        while (list($key, $arr) = each($this->arrCookie)) {
	            if (!@setcookie($key, $arr['value'], $arr['expire'])) {
	                trigger_error('save()-Aufruf innerhalb von HTML', E_USER_WARNING);
	                return 0;
	            }
	        }
	    }
	    
	    return $count;
	}
	
}



?>